package com.qqn.kuangbiao.class3_20;

/**
 * 有序数组的平方
 * 给你一个按 非递减顺序 排序的整数数组 nums，返回 每个数字的平方 组成的新数组，要求也按 非递减顺序 排序。
 */
public class algorithm03 {
    // mid 变量的定义争取最小作用域有效 所以尽量不要写在循环外面
    public static int[] sortedSquares(int[] nums) {
        int L = 0;
        int R = nums.length - 1;
        int[] result = new int[nums.length];
        int pos = nums.length - 1;
        while (L <= R) {
            int LL = nums[L] * nums[L];
            int RR = nums[R] * nums[R];
            if (LL > RR) {
                result[pos] = LL;
                L++;
                // 之前错的逻辑是这里写了 R--，虽然都是最右侧的放置好了，但是这里总结一下数轴上面数的平方的特性：
                // 平方结果如果  最右侧小于最左侧，直接交换然后不再看左侧，交换后的左侧数据的平方 确定是给定的数轴数据平方后最小的
            } else { // LL < RR
                result[pos] = RR;
                R--;
            }
            pos--;
        }
        return result;

    }


    public static void main(String[] args) {
        int[] testArr = new int[]{-5, -3, -2, -1};
        int[] arr = sortedSquares(testArr);
        for (int i : arr) {
            System.out.print(i + "  ");
        }
    }
}
